package main

import (
	"fmt"
	"strconv"
	"strings"
)

// 子域名访问计数

func subdomainVisits(cpdomains []string) []string {
	// 使用哈希表存储每个域名    d1.d2.d3  d2.d3  d3
	cntMap := make(map[string]int)
	for _, domain := range cpdomains {
		i := strings.IndexByte(domain, ' ') // 数字
		cnt, _ := strconv.Atoi(domain[:i])
		domain = domain[i+1:] // i指向的空格位置
		cntMap[domain] += cnt // 此时最底级域名
		for {
			// 遍历得到更高级域名
			pointIdx := strings.IndexByte(domain, '.')
			if pointIdx < 0 { // 没有 .
				break
			}
			domain = domain[pointIdx+1:]
			cntMap[domain] += cnt
		}
	}
	//
	res := make([]string, 0, len(cntMap))
	for k, v := range cntMap {
		res = append(res, strconv.Itoa(v)+" "+k)
	}
	return res
}

func main() {
	cpdomains := []string{"9001 discuss.leetcode.com"}
	res := subdomainVisits(cpdomains)
	fmt.Println(res)
}
